2020-2021 Sunseeker Telemetry and Lighting System
ucs_ex1_DCO12MHz.c
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 //******************************************************************************
63 //******************************************************************************
64 #include "driverlib.h"
65 //*****************************************************************************
66 //
67 //Target frequency for MCLK in kHz
68 //
69 //*****************************************************************************
70 #define UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ 12000
71 
72 //*****************************************************************************
73 //
74 //MCLK/FLLRef Ratio
75 //
76 //*****************************************************************************
77 #define UCS_MCLK_FLLREF_RATIO 366
78 
79 //*****************************************************************************
80 //
81 //Variable to store current Clock values
82 //
83 //*****************************************************************************
84 uint32_t clockValue = 0;
85 
86 //*****************************************************************************
87 //
88 //Variable to store status of Oscillator fault flags
89 //
90 //*****************************************************************************
91 uint16_t status;
92 
93 void main (void)
94 {
95  //Stop WDT
96  WDT_A_hold(WDT_A_BASE);
97 
98  //Set VCore = 1 for 12MHz clock
99  PMM_setVCore(PMM_CORE_LEVEL_1);
100 
101  //Set P1.0 to output direction
102  GPIO_setAsOutputPin(
103  GPIO_PORT_P1,
104  GPIO_PIN0
105  );
106 
107  //ACLK, MCLK, MCLK set out to pins
108  GPIO_setAsPeripheralModuleFunctionOutputPin(
109  GPIO_PORT_P11,
110  GPIO_PIN0 + GPIO_PIN1 + GPIO_PIN2
111  );
112 
113  //Set DCO FLL reference = REFO
114  UCS_initClockSignal(
115  UCS_FLLREF,
116  UCS_REFOCLK_SELECT,
117  UCS_CLOCK_DIVIDER_1
118  );
119  //Set ACLK = REFO
120  UCS_initClockSignal(
121  UCS_ACLK,
122  UCS_REFOCLK_SELECT,
123  UCS_CLOCK_DIVIDER_1
124  );
125 
126  //Set Ratio and Desired MCLK Frequency and initialize DCO
127  UCS_initFLLSettle(
130  );
131 
132  // Enable global oscillator fault flag
133  SFR_clearInterrupt(SFR_OSCILLATOR_FAULT_INTERRUPT);
134  SFR_enableInterrupt(SFR_OSCILLATOR_FAULT_INTERRUPT);
135 
136  // Enable global interrupt
137  __bis_SR_register(GIE);
138 
139  //Verify if the Clock settings are as expected
140  clockValue = UCS_getSMCLK();
141  clockValue = UCS_getMCLK();
142  clockValue = UCS_getACLK();
143 
144  while (1)
145  {
146  //Toggle P1.0
147  GPIO_toggleOutputOnPin(
148  GPIO_PORT_P1,
149  GPIO_PIN0
150  );
151 
152  //Delay
153  __delay_cycles(1000000);
154  }
155 }
156 
157 
158 #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
159 #pragma vector=UNMI_VECTOR
160 __interrupt
161 #elif defined(__GNUC__)
162 __attribute__((interrupt(UNMI_VECTOR)))
163 #endif
164 void NMI_ISR(void)
165 {
166  do {
167  // If it still can't clear the oscillator fault flags after the timeout,
168  // trap and wait here.
169  status = UCS_clearAllOscFlagsWithTimeout(1000);
170  } while(status != 0);
171 }
__delay_cycles(500000)
#define UCS_MCLK_FLLREF_RATIO
void NMI_ISR(void)
uint16_t status
void main(void)
uint32_t clockValue
#define UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ